package com.yt.lxh.common.utils;

import com.yt.lxh.model.acl.Menu;

import java.util.ArrayList;
import java.util.List;

//封装树形菜单数据
public class TreeHelper {
    //递归实现封装过程
    public static List<Menu> buildTree(List<Menu> menuList){
        //menuList所有菜单集合
        //创建list集合，用于封装最终数据
        List<Menu> trees = new ArrayList<>();
        //遍历所有菜单集合
        for (Menu menu :menuList) {
            //找到递归操作的入口，第一层菜单
            //条件：parent_id=0
            if (menu.getParentId()==0){
                //根据第一层，找下层数据，使用递归完成
                //写方法实现找下层过程，方法里面传递两个参数：第一个参数当前第一层菜单，第二个参数是所有菜单集合
                trees.add(findChildren(menu,menuList));
            }
        }
        return trees;
    }

    //递归查找下层菜单
    private static Menu findChildren(Menu menu, List<Menu> menuList) {
        //Menu有属性：private List<Menu> children;封装下一层数据
        menu.setChildren(new ArrayList<>());
        //递归查询
        //menu的id值和menuList中parentId值相同
        for (Menu it:menuList) {
            //判断id和parentId是否相同
            if (menu.getId().longValue()==it.getParentId()){
                //it就是下层数据，进行封装
                menu.getChildren().add(findChildren(it,menuList));
            }
        }
        return menu;
    }
}
